package com.atguigu.myjuc.demo;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * 数组线程不安全问题
 */
public class NotSafeDemo {
    public static void main(String[] args) {
        NotSafe notSafe = new NotSafe();
//        notSafe.NotSafeList();
//        notSafe.NotSafeSet();
        notSafe.NotSafeMap();
        /*List<String> list = new CopyOnWriteArrayList<>();//Collections.synchronizedList(new ArrayList<>()) new Vector<>()
        Set<String> set = new CopyOnWriteArraySet<>();//Collections.synchronizedSet(new HashSet<>())
        Map<String,String> map = new ConcurrentHashMap<>();//Collections.synchronizedMap(new HashMap<>())*/
    }
}

class NotSafe{
    public void NotSafeList(){
        List<String> list = new CopyOnWriteArrayList<>();//Collections.synchronizedList(new ArrayList<>());//new Vector<>();//new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,6));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }

    public void NotSafeSet(){
        Set<String> set = new CopyOnWriteArraySet<>();//Collections.synchronizedSet(new HashSet<>());//new HashSet<>();
        for (int i = 1; i <= 100; i++) {
            new Thread(()->{
                set.add(UUID.randomUUID().toString().substring(0,6));
                System.out.println(set);
            },String.valueOf(i)).start();
        }
    }

    public void NotSafeMap(){
        Map<String,String> map = new ConcurrentHashMap<>();//Collections.synchronizedMap(new HashMap<>());//new HashMap<>();
        for (int i = 1; i <= 100; i++) {
            new Thread(()->{
                map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,6));

                System.out.println(map);
            },String.valueOf(i)).start();
        }
    }
}

